package com.intelligence.device.manager.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.intelligence.device.manager.service.DeviceLogService;
import com.intelligence.device.manager.service.DeviceService;
import com.intelligence.entity.pojo.Device;
import com.intelligence.entity.pojo.DeviceLog;
import com.intelligence.entity.result.Result;
import com.intelligence.entity.vo.MonpointsVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 通用的增删改页面
 *
 * @Author : RulerWood
 * @Data : 2024/6/3 - 15:56
 */
@RestController
@RequestMapping("/device/device")
public class DeviceController {

    @Autowired
    private DeviceService deviceService;

    /**
     * 获取数据列表
     *
     * @param offset   当前页数
     * @param pageSize 每页条目数
     * @return
     */
    @GetMapping("/pageDevice")
    public Result<Page<Device>> pageDevice(@RequestParam(value = "offset", defaultValue = "1") Integer offset,
                                           @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {
        return Result.build(deviceService.page(new Page<>(offset, pageSize)), 200, "获取设备日志列表成功");
    }

    /**
     * 获取数据列表
     *
     * @return
     */
    @GetMapping("/listDevice")
    public Result<List<Device>> listDevice() {
        return Result.build(deviceService.list(), 200, "获取设备日志列表成功");
    }

    @GetMapping("/listByMid")
    Result<List<Device>> listByMid(@RequestParam(value = "mid") Integer mid) {
        return Result.build(deviceService.listByMid(mid), 200, "获取设备日志列表成功");
    }

    /**
     * 获取单个对象
     *
     * @param id 对象主键
     * @return
     */
    @GetMapping("/getOneDevice/{id}")
    public Result<Device> getOneDevice(@PathVariable(value = "id") Integer id) {
        return Result.build(deviceService.getById(id), 200, "获取设备日志成功");
    }

    /**
     * 1、用户登录时获取用户的基地信息存储到数redis中
     * 2、根据用户id存储设备在线状态到redis中
     * 3、取出redis中的设备在线状态，如果没有那么从数据库中获取
     * 获取设备在线状态
     * 1、从redis里面获取（如果为空则从数据库查询）
     * 2、获取设备状态
     * <p>
     * 要实现的功能：
     *    todo  超级管理员可以查看所有的设备信息
     *    todo  市政级管理人员可以查看当前管辖地区的设备信息
     * <p>
     * 基地管理人员只能查看属于自己的基地信息
     *
     * @param farmId 基地主键(用来实现条件查询，某个基地下面的设备信息)
     * @return
     */
    @GetMapping("/onlineDevice")
    public Result<List<MonpointsVo>> onlineDevice(@RequestParam(name = "farmId", defaultValue = "0") Integer farmId) {
        System.err.println("farmId---->" + farmId);
        return Result.build(deviceService.onlineDevice(farmId), 200, "获取设备在线状态成功");
    }


    /**
     * 数据的新增
     *
     * @param device 保存对象
     * @return
     */
    @PostMapping("/saveDevice")
    public Result saveDevice(@RequestBody Device device) {
        deviceService.save(device);
        return Result.build(null, 200, "保存设备日志成功");
    }

    /**
     * 数据的修改
     *
     * @param device 修改对象
     * @return
     */
    @PutMapping("/updateDevice")
    public Result updateDevice(@RequestBody Device device) {
        deviceService.updateById(device);
        return Result.build(null, 200, "更新设备日志成功");
    }

    /**
     * 删除某条数据
     *
     * @param id 数据主键
     * @return
     */
    @DeleteMapping("/deleteDevice/{id}")
    public Result deleteDevice(@PathVariable(value = "id") Integer id) {
        deviceService.removeById(id);
        return Result.build(null, 200, "删除设备日志成功");
    }

}
